sql server 2008 r2如何收縮數(shù)據(jù)庫和文件
發(fā)布時(shí)間:2016/11/3 10:54:05
1、右擊數(shù)據(jù)庫選擇,打開Files窗口
2、Files窗口,F(xiàn)ile type 選擇 Log,單擊OK完成日志收縮。
按以上方法操作沒有效果,原因是數(shù)據(jù)庫的恢復(fù)模式不是簡(jiǎn)單模式,只需要將恢復(fù)模式改為簡(jiǎn)單模式即可用以上操作來收縮日志,方便又好用。
將數(shù)據(jù)庫恢復(fù)模式改為簡(jiǎn)單模式方法:
1、右擊數(shù)據(jù)庫選擇屬性,彈出窗口如下圖,選擇Options選項(xiàng),將 Recovery Model 改為 Simple 即可。
按如下方法操作也可收縮日志:
1、當(dāng)數(shù)據(jù)庫恢復(fù)模式為簡(jiǎn)單時(shí)。使用dbcc shrinkfile (logfile_name,target_size)命令來完成。如
use mydb
dbcc shrinkfile (mydb_log,10) --將mydb_log收縮至10m
2、當(dāng)數(shù)據(jù)庫恢復(fù)模式為完全時(shí)?梢韵葘(shù)據(jù)庫模式改為簡(jiǎn)單模式,再使用上述方法來進(jìn)行。
use master
alter database mydb set recovery simple
dbcc shrinkfile (mydb_log,10) --將mydb_log收縮至10m
也可以直接備份事務(wù)日志文件后再收縮:
use master
backup log mydb to disk='d:/dd.bak'
use mydb
dbcc shrinkfile (mydb_log,10) --將mydb_log收縮至10m;
3、通過分離數(shù)據(jù)庫,然后再刪除事務(wù)日志文件,再附加mdf數(shù)據(jù)文件,也可以達(dá)到某種意義上的事務(wù)日志收縮。
以下是有關(guān)日志文摘
對(duì)于每一個(gè)數(shù)據(jù)庫來講,都需要至少一個(gè)事務(wù)日志文件。事務(wù)日志文件是整個(gè)數(shù)據(jù)庫的血液,如果沒有事務(wù)日志的話,那么將無法進(jìn)行任何操作。
事務(wù)日志有什么東西?
事務(wù)日志記錄著在相關(guān)數(shù)據(jù)庫上的操作,同時(shí)還存儲(chǔ)數(shù)據(jù)庫恢復(fù)(recovery)的相關(guān)信息。
事務(wù)日志與數(shù)據(jù)庫恢復(fù)(recovery)是密切相關(guān)的,其實(shí)數(shù)據(jù)庫在啟動(dòng)時(shí),便會(huì)進(jìn)行相關(guān)的恢復(fù)(recovery)操作,如下所示。當(dāng)然,在數(shù)據(jù)庫還原時(shí),也可以指定手工恢復(fù)(recovery).任何在數(shù)據(jù)庫上的改變,如果在事務(wù)日志內(nèi)被標(biāo)記為已提交,并用一個(gè)LSN(LOG SEQUENCE NUMBER)來標(biāo)識(shí),同時(shí)相關(guān)改變就會(huì)體現(xiàn)在數(shù)據(jù)文件上,而被標(biāo)記為未提交的改變將不會(huì)體現(xiàn)在數(shù)據(jù)文件上。
2010-01-12 18:31:48.72 spid7s Recovery is complete. This is an informationa message only. No user action is required.
事務(wù)日志文件還存儲(chǔ)著數(shù)據(jù)庫需要回滾的相關(guān)信息。在SQL Server數(shù)據(jù)庫上,默認(rèn)是隱式提交的,也就是說在查詢分析器里面進(jìn)行的每一個(gè)操作,在操作完成后,都是默認(rèn)已經(jīng)commit,但如果通過指定begin tran 和rollback tran的命令來標(biāo)識(shí)事務(wù)時(shí),rollback tran就需要使用事務(wù)日志內(nèi)的相關(guān)信息才可以回滾。當(dāng)然,如果SQL Server遇到相關(guān)錯(cuò)誤時(shí),如死鎖,那么也會(huì)產(chǎn)生一個(gè)內(nèi)部回滾,這些都需要用到事務(wù)日志文件。
為什么要收縮事務(wù)日志?
收縮日志的原因有很多種,有些則是考慮空間不足,有些則是應(yīng)用程序限制導(dǎo)致的,一般情況下,是不建議對(duì)事務(wù)日志進(jìn)行其他改變的,如需要控制事務(wù)日志的大小,則可以通過安排事務(wù)日志備份來解決。如果確定事務(wù)日志包含將不再使用的未使用空間,則可以通過減少事務(wù)日志的大小,以便回收過多空間。但這種情況對(duì)于一個(gè)DBA來講,應(yīng)該要盡量避免。
僅當(dāng)數(shù)據(jù)庫處于聯(lián)機(jī)狀態(tài),而且至少一個(gè)虛擬日志文件可用時(shí),收縮才會(huì)發(fā)生。在某些情況下,直到下一個(gè)日志截?cái)嗪,才能收縮日志。
事務(wù)日志收縮的原理:
每個(gè)事務(wù)日志由多個(gè)虛擬日志文件組成(virtual log file).虛擬日志文件沒有固定的大小,也沒有固定的個(gè)數(shù)。在創(chuàng)建事務(wù)日志文件或者擴(kuò)展事務(wù)日志文件時(shí),SQL SERVER便會(huì)自動(dòng)創(chuàng)建合適大小的虛擬日志文件,DBA無法控制虛擬日志文件的大小和個(gè)數(shù)。在擴(kuò)展日志文件后,虛擬文件的大小是現(xiàn)有日志大小和新文件增量大小之和。因此,如果在創(chuàng)建數(shù)據(jù)庫時(shí),對(duì)數(shù)據(jù)庫指定了比較小的初始大小,又指定了比較小的日志增長(zhǎng)量,隨著事務(wù)日志的自動(dòng)擴(kuò)展,虛擬日志文件個(gè)數(shù)會(huì)越來越多,從而影響了數(shù)據(jù)庫性能。因此,在創(chuàng)建數(shù)據(jù)庫時(shí),盡量指定比較合適的初始事務(wù)日志大小,同時(shí)指定合理的事務(wù)日志增長(zhǎng)量,這點(diǎn)可以參考數(shù)據(jù)文件的標(biāo)準(zhǔn)。如果大于10G或者更大的話,則指定固定的增長(zhǎng)量,如果比較小,則指定按百分比的增長(zhǎng)量來進(jìn)行。